/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package sensorLAN.UIServidor;

import java.awt.BorderLayout;
import java.awt.FontMetrics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

import clienteServidor.DatosEquipo;

/**
 *
 * @author Cesar
 */
class PanelTabla extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 163649859261221620L;
	private JTable tabla;

	private JScrollPane scroll;
	private String aux="";
	//private MiJPopupMenu popup;
	private Principal principal;
	private String macABorrar;
	private int filaABorrar;

	public PanelTabla(Principal principal) {
		this.principal= principal;
		DefaultTableModel modelo = new ModeloTabla();
		this.setLayout(new BorderLayout());
		tabla= new MiJTable(modelo);

		scroll= new JScrollPane();
		scroll.setViewportView(tabla);
		this.add(scroll, BorderLayout.CENTER);

		tabla.getTableHeader().setReorderingAllowed(false);
		//popup= new MiJPopupMenu();
		//tabla.setComponentPopupMenu(popup);

		inicializarAnchoColumnas();

		manejarEventos();
	}

	private void manejarEventos(){
		tabla.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e){
				if (SwingUtilities.isRightMouseButton(e)){
					botonDerecho(e);
				}
			}
		});
	}

	private void botonDerecho(MouseEvent e){
		JTable table = (JTable)e.getSource();
        Point p = e.getPoint();
        
        int fila = table.rowAtPoint(p);
        String value="<html>";
        for(int c= 0; c < NombreColumnas.values().length; c++){
        	value+= NombreColumnas.values()[c].getDescripcion()+": "+table.getValueAt(fila,c)+"<br>";
        }
        value+= "</html>";
        filaABorrar= fila;
        macABorrar= String.valueOf(table.getValueAt(fila, NombreColumnas.MAC.getNroColumna()));
		VentanaClickDerecho v= new VentanaClickDerecho(principal, this, value);
		v.setVisible(true);
	}
	
	private void inicializarAnchoColumnas(){
		this.establecerAnchoColumna(NombreColumnas.NRO.getDescripcion(), "999");
		this.establecerAnchoColumna(NombreColumnas.MAC.getDescripcion(), "00-00-00-00-00-00");
		this.establecerAnchoColumna(NombreColumnas.IPV4.getDescripcion(), "255.255.255.255");
		this.establecerAnchoColumna(NombreColumnas.CONECTADO_A_LAN.getDescripcion(), NombreColumnas.CONECTADO_A_LAN.getDescripcion());
		this.establecerAnchoColumna(NombreColumnas.ESTADO_BATERIA.getDescripcion(), NombreColumnas.ESTADO_BATERIA.getDescripcion());
		this.establecerAnchoColumna(NombreColumnas.VERSION.getDescripcion(), NombreColumnas.VERSION.getDescripcion());
		//this.establecerAnchoColumna(NombreColumnas.MEMORIA.getDescripcion(), NombreColumnas.MEMORIA.getDescripcion());
		//this.establecerAnchoColumna(NombreColumnas.CPU.getDescripcion(), NombreColumnas.CPU.getDescripcion());
		this.establecerAnchoColumna(NombreColumnas.RECIBIDO.getDescripcion(), NombreColumnas.RECIBIDO.getDescripcion());
		this.establecerAnchoColumna(NombreColumnas.DETALLE_BATERIA.getDescripcion(), NombreColumnas.DETALLE_BATERIA.getDescripcion()+"000000");
		this.establecerAnchoColumna(NombreColumnas.NOMBRE_EQUIPO.getDescripcion(), "0000-0000-0000-0000-");
		this.establecerAnchoColumna(NombreColumnas.USUARIO.getDescripcion(), "0000-0000-0000-0000-");
	}

	private void establecerAnchoColumna(String NombreColumna, String valorMaximo){
		TableColumn columna = tabla.getColumn(NombreColumna);
		int gap= 10;
		FontMetrics fm = tabla.getFontMetrics(tabla.getFont());
		int tam= fm.stringWidth(valorMaximo)+gap;
		columna.setPreferredWidth(tam);
		columna.setMinWidth(tam);
		columna.setMaxWidth(tam);
	}

	protected void nuevoFiltro(String regex) {
		aux= regex;
		((MiJTable)tabla).nuevoFiltro(aux);
	}

	protected void actualizarModeloTabla(final List<DatosEquipo> nuevosDatos){
		(new ActualizadorModeloTabla((MiJTable)tabla, nuevosDatos)).execute();
	}

	public void actualizarDatosTabla(){
		actualizarModeloTabla(principal.getServidor().getCopiaListaClientes());
	}

	public JTable getTabla() {
		return tabla;
	}

	public List<String> getDatos(){
		return ((ModeloTabla) this.tabla.getModel()).getDatos();
	}

	protected Principal getPrincipal() {
		return principal;
	}

	protected void borrarFila() {
		principal.borrarFila(macABorrar);
		//actualizarModeloTabla(principal.getServidor().getCopiaListaClientes());
		((MiJTable)tabla).borrarFila(filaABorrar);
	}

}
